const testMsg = {
	date: '2023/12/15', // 日期 2023/12/15 - 不要了
	time: '19:43:29', // 事件 19:09:50
	weidu: '30.627360250833334', // 纬度
	jingdu: '104.03623754333333', // 经度
	speed: '0.018', // 对地速度
	hangxiang: '50.5', // 航向
	fMode: 'A', // 定位模式看是否为差分A=自主定位，D=差分，E=估算，N=数据无效
	altitude: '490.5256', // 海拔
	height: '-42.352', // 地球椭球面相对大地水准面高度 - 不要了
	wxCount: '12', // 当前卫星数量
	type: 'fix', // 当前定位状态fix是单点 - 不要了
	fuyang: '0.69', // 俯仰角
	gundong: '-0.09', // 滚动角
	hangxiangJiao: '-3.41', // 航向角
	id: '1',
}

const testMsg1 = {
	date: '0', // 日期 2023/12/15 - 不要了
	time: '0', // 事件 19:09:50
	weidu: '10', // 纬度
	jingdu: '10', // 经度
	speed: '10', // 对地速度
	hangxiang: '10', // 航向
	fMode: '10', // 定位模式看是否为差分A=自主定位，D=差分，E=估算，N=数据无效
	altitude: '10', // 海拔
	height: '10', // 地球椭球面相对大地水准面高度 - 不要了
	wxCount: '10', // 当前卫星数量
	type: '10', // 当前定位状态fix是单点 - 不要了
	fuyang: '10', // 俯仰角
	gundong: '10', // 滚动角
	hangxiangJiao: '10', // 航向角
	id: '1',
}

// 辅助函数如果为空
function getStrBlank(fieldStr) {
	let res = ''
	if (fieldStr) {
		let str = fieldStr.split('.')
		if (str[1]) {
			// 判断小数点后面位数大于6,则只取前6位
			if (str[1].length > 6) {
				res = str[0] + 'B' + str[1].substring(0, 6) + 'A'
			} else {
				res = str[0] + 'B' + str[1] + 'A'
			}
		} else {
			res = str[0] + 'A'
		}
	} else {
		res += 0 + 'A'
	}
	return res
}

// 辅助函数判断是否符号
function getStrFu(fieldStr) {
	if (fieldStr) {
		if (fieldStr[0] === '-') {
			fieldStr = fieldStr.replace('-', 'F').replace('.', 'B')
			return fieldStr + 'A'
		} else {
			fieldStr = fieldStr.replace('.', 'B')
			return fieldStr + 'A'
		}
	} else {
		return '' + 'A'
	}
}

function sendPositionMsg(msgObj) {
	resStr = ''
	// 1~3.处理时间-多2个字段
	if (msgObj.time) {
		msgObj.time = msgObj.time.replace(/:/g, 'A')
		resStr += msgObj.time + 'A'
	} else {
		resStr += '' + 'A' + '' + 'A' + '' + 'A'
	}
	// 4.纬度
	resStr += getStrBlank(msgObj.weidu + '')
	// 5.经度
	resStr += getStrBlank(msgObj.jingdu + '')
	// 6.速度
	resStr += getStrBlank(msgObj.speed + '')
	// 7.航向
	resStr += getStrBlank(msgObj.hangxiang + '')
	// 8.定位模式
	let mode = '0'
	if (msgObj.fMode === 'A') {
		mode = '1' // 1表示自主定位
	} else if (msgObj.fMode === 'D') {
		mode = '2' // 2表示差分
	} else if (msgObj.fMode === 'E') {
		mode = '3' // 3表示估算
	} else {
		mode = '0'
	}
	resStr += mode + 'A'
	// 9.海拔
	resStr += getStrBlank(msgObj.altitude + '')
	// 10.地球椭球面相对大地水准面高度
	// resStr += getStrFu(msgObj.height + "")
	// 10.当前卫星数量
	resStr += msgObj.wxCount + '' + 'A'
	// 11.俯仰角
	resStr += getStrFu(msgObj.fuyang)
	// 12.滚动角
	resStr += getStrFu(msgObj.gundong)
	// 13.方位角
	resStr += getStrFu(msgObj.hangxiangJiao)
	// 14.航天器标识
	resStr += msgObj.id
	return resStr
}
// console.log(testMsg)
// console.log(sendPositionMsg(testMsg))
// console.log(sendPositionMsg(testMsg).length)
module.exports = sendPositionMsg
